package reflect;

import java.lang.reflect.Method;
import java.lang.reflect.Modifier;

/**
 * 反射机制获取方法的相关信息[方法名、返回值类型、参数类型、参数个数、访问修饰符]
 */
public class Demo07Reflect {
    public static void main(String[] args) throws Exception{
        Class cls = Class.forName("reflect.Person");
        Method method = cls.getMethod("say", String.class, int.class);
        //1.获取方法名;
        String name = method.getName();
        System.out.println("方法名:" + name);
        //2.获取方法返回值类型;
        Class returnType = method.getReturnType();
        System.out.println("返回值类型:" + returnType);
        //3.获取方法参数类型;
        Class[] parameterTypes = method.getParameterTypes();
        for (Class c : parameterTypes) {
            System.out.println("参数类型:" + c);
        }
        //4.获取参数个数
        int count = method.getParameterCount();
        System.out.println("参数个数:" + count);
        //5.获取方法的访问修饰符
        /*
            5.1 返回值为int类型, 1, 2, ...;
            5.2 不用记,Java中单独提供了一个类叫做: Modifier,提供了所有的类型;
         */
        int modifiers = method.getModifiers();
        System.out.println("返回值类型:" + modifiers);
        switch (modifiers) {
            case Modifier.PUBLIC:
                System.out.println("访问修饰符:public");
                break;
            case Modifier.PRIVATE:
                System.out.println("访问修饰符:private");
                break;
            case Modifier.PROTECTED:
                System.out.println("访问修饰符:protected");
                break;
            default:
                System.out.println("访问修饰符:default");
                break;
        }
    }
}












